Programming languages currently feature a wide variety of fixed size numeric types (ex. 8 bit unsigned integers and 32 bit signed integers) and operations on those types. These types and operations frequently correspond to the types and operations supported in hardware on the underlying computer architecture. These fixed size numeric types contain approximations of numeric values. The fixed size numeric types support arithmetic which is deterministic but their approximations are inadequate for precise number-theoretic operations. Libraries are available for many languages to support variable-precision numeric types so that precise operations can be performed on unbounded numeric values. These libraries support a precision adequate for precise number-theoretic operations, but these libraries typically incur a significant performance penalty.
These and other drawbacks exist with current systems.